From ff45a86a1c695b88f9503a58ab241cf534e9e72f Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 11 Sep 2017 14:45:36 -0400 Subject: [PATCH] Fix rendering glyphs from the cache We were not quite using all the right dimensions. --- gsk/gskvulkancolortextpipeline.c | 13 ++++++------- gsk/gskvulkanrenderer.c | 18 +++++++++++------- gsk/gskvulkanrendererprivate.h | 6 ++++-- gsk/gskvulkantextpipeline.c | 13 ++++++------- 4 files changed, 27 insertions(+), 23 deletions(-) diff --git a/gsk/gskvulkancolortextpipeline.c b/gsk/gskvulkancolortextpipeline.c index b3da054ffa..6cca24334e 100644 --- a/gsk/gskvulkancolortextpipeline.c +++ b/gsk/gskvulkancolortextpipeline.c @@ -104,8 +104,7 @@ gsk_vulkan_color_text_pipeline_collect_vertex_data (GskVulkanColorTextPipeline * GskVulkanColorTextInstance *instances = (GskVulkanColorTextInstance *) data; int i, count; int x_position = 0; - float ascent; - float height; + float dx, dy, dw, dh; count = 0; for (i = 0; i < glyphs->num_glyphs; i++) @@ -126,11 +125,11 @@ gsk_vulkan_color_text_pipeline_collect_vertex_data (GskVulkanColorTextPipeline * &instance->tex_rect[1], &instance->tex_rect[2], &instance->tex_rect[3], - &ascent, &height); - instance->rect[0] = x + cx; - instance->rect[1] = y + cy - ascent; - instance->rect[2] = PANGO_PIXELS_CEIL (gi->geometry.width); - instance->rect[3] = height; + &dx, &dy, &dw, &dh); + instance->rect[0] = x + cx + dx; + instance->rect[1] = y + cy + dy; + instance->rect[2] = dw; + instance->rect[3] = dh; count++; } diff --git a/gsk/gskvulkanrenderer.c b/gsk/gskvulkanrenderer.c index a56fd57d4f..d9739a02cc 100644 --- a/gsk/gskvulkanrenderer.c +++ b/gsk/gskvulkanrenderer.c @@ -419,8 +419,10 @@ gsk_vulkan_renderer_get_glyph_coords (GskVulkanRenderer *self, float *ty, float *tw, float *th, - float *ascent, - float *height) + float *dx, + float *dy, + float *dw, + float *dh) { GlyphCacheValue *gv; @@ -432,8 +434,10 @@ gsk_vulkan_renderer_get_glyph_coords (GskVulkanRenderer *self, *ty = gv->ty; *tw = gv->tw; *th = gv->th; - *ascent = - gv->draw_y; - *height = gv->draw_height; + *dx = gv->draw_x; + *dy = gv->draw_y; + *dw = gv->draw_width; + *dh = gv->draw_height; } } @@ -502,10 +506,10 @@ add_to_cache (GlyphCache *cache, return; cairo_set_scaled_font (cr, scaled_font); - cairo_set_source_rgba (cr, 0, 0, 0, 1); + cairo_set_source_rgba (cr, 1, 1, 1, 1); cg.index = glyph; - cg.x = cache->x; + cg.x = cache->x - value->draw_x; cg.y = cache->y0 - value->draw_y; cairo_show_glyphs (cr, &cg, 1); @@ -515,7 +519,7 @@ add_to_cache (GlyphCache *cache, cache->x = cache->x + value->draw_width + 1; cache->y = MAX (cache->y, cache->y0 + value->draw_height + 1); - value->tx = cg.x / cache->width; + value->tx = (cg.x + value->draw_x) / cache->width; value->ty = (cg.y + value->draw_y) / cache->height; value->tw = (float)value->draw_width / cache->width; value->th = (float)value->draw_height / cache->height; diff --git a/gsk/gskvulkanrendererprivate.h b/gsk/gskvulkanrendererprivate.h index fe5b0de483..25b90e6c29 100644 --- a/gsk/gskvulkanrendererprivate.h +++ b/gsk/gskvulkanrendererprivate.h @@ -37,8 +37,10 @@ void gsk_vulkan_renderer_get_glyph_coords (GskVulk float *ty, float *tw, float *th, - float *ascent, - float *height); + float *dx, + float *dy, + float *dw, + float *dh); void gsk_vulkan_renderer_cache_glyphs (GskVulkanRenderer *renderer, PangoFont *font, diff --git a/gsk/gskvulkantextpipeline.c b/gsk/gskvulkantextpipeline.c index 81eee308c9..def6c6e95f 100644 --- a/gsk/gskvulkantextpipeline.c +++ b/gsk/gskvulkantextpipeline.c @@ -112,8 +112,7 @@ gsk_vulkan_text_pipeline_collect_vertex_data (GskVulkanTextPipeline *pipeline, GskVulkanTextInstance *instances = (GskVulkanTextInstance *) data; int i, count; int x_position = 0; - float ascent; - float height; + float dx, dy, dw, dh; count = 0; for (i = 0; i < glyphs->num_glyphs; i++) @@ -134,11 +133,11 @@ gsk_vulkan_text_pipeline_collect_vertex_data (GskVulkanTextPipeline *pipeline, &instance->tex_rect[1], &instance->tex_rect[2], &instance->tex_rect[3], - &ascent, &height); - instance->rect[0] = x + cx; - instance->rect[1] = y + cy - ascent; - instance->rect[2] = PANGO_PIXELS_CEIL (gi->geometry.width); - instance->rect[3] = height; + &dx, &dy, &dw, &dh); + instance->rect[0] = x + cx + dx; + instance->rect[1] = y + cy + dy; + instance->rect[2] = dw; + instance->rect[3] = dh; instance->color[0] = color->red; instance->color[1] = color->green; instance->color[2] = color->blue; -- 2.30.2